// #include "BlockQueue.hpp"
// #include <unistd.h>

// BlockQueue<int> q(5);
// void *producter(void *arg) {
//   char *name = static_cast<char *>(arg);
//   int val = 0;
//   for (int i = 0; i < 10; i++) {
//     val = static_cast<int>(q.Pop());
//     std::cout << name << ":"
//               << "pop:" << val << " " << std::endl;
//     usleep(1);
//   }
//   return nullptr;
// }

// static void *consumer(void *arg) {
//   char *name = static_cast<char *>(arg);
//   for (int i = 0; i < 10; i++) {
//     q.Push(i);
//     std::cout << name << ":"
//               << "push:" << i << " " << std::endl;
//     usleep(1);
//   }
//   return nullptr;
// }

// int main() {
//   pthread_t p, c;
//   pthread_create(&p, nullptr, producter, (void *)"p_1");
//   pthread_create(&c, nullptr, consumer, (void *)"c_1");

//   pthread_join(p, nullptr);
//   pthread_join(c, nullptr);
//   return 0;
// }

#include "test.hpp"
int main() {
  test t(5, 10, 3, 2);
  t.transaction();
  return 0;
}